package cn.csc.module.system.framework.sms.core.client.impl;

import cn.csc.framework.common.core.KeyValue;
import cn.csc.framework.common.util.date.DateUtils;
import cn.csc.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO;
import cn.csc.module.system.framework.sms.core.client.dto.SmsSendRespDTO;
import cn.csc.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO;
import cn.csc.module.system.framework.sms.core.property.SmsChannelProperties;
import cn.hutool.core.lang.Assert;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 自定义短信客户端
 * @author liuchuang
 * @version 1.0
 * @modify
 * @since 2024/11/29 10:53
 */
@Slf4j
public class CustomSmsClient extends AbstractSmsClient {

    Map<String, String> params = new HashMap<>();

    public CustomSmsClient(SmsChannelProperties properties) {
        super(properties);
        Assert.notEmpty(properties.getApiKey(), "apiKey 不能为空");
        Assert.notEmpty(properties.getApiSecret(), "apiSecret 不能为空");
    }

    /**
     * 自定义初始化
     */
    @Override
    protected void doInit() {
        String timestamp = DateUtils.getCurrentDate("MMDDHHMMSS");
        String plaintext = String.format("%s%s%s%s", this.properties.getApiKey().toUpperCase(), "00000000", this.properties.getApiSecret(), timestamp);
        Map<String, String> params = new HashMap<>();
        params.put("userid", this.properties.getApiKey());
        params.put("pwd", DigestUtils.md5Hex(plaintext));
        params.put("timestamp", timestamp);
    }

    /**
     * 发送消息
     *
     * @param logId          日志编号
     * @param mobile         手机号
     * @param apiTemplateId  短信 API 的模板编号
     * @param templateParams 短信模板参数。通过 List 数组，保证参数的顺序
     * @return 短信发送结果
     */
    @Override
    public SmsSendRespDTO sendSms(Long logId, String mobile, String apiTemplateId, List<KeyValue<String, Object>> templateParams) throws Throwable {
        return null;
    }

    /**
     * 解析接收短信的接收结果
     *
     * @param text 结果
     * @return 结果内容
     * @throws Throwable 当解析 text 发生异常时，则会抛出异常
     */
    @Override
    public List<SmsReceiveRespDTO> parseSmsReceiveStatus(String text) throws Throwable {
        return null;
    }

    /**
     * 查询指定的短信模板
     *
     * @param apiTemplateId 短信 API 的模板编号
     * @return 短信模板
     */
    @Override
    public SmsTemplateRespDTO getSmsTemplate(String apiTemplateId) throws Throwable {
        return null;
    }


}
